﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using BLL;
using DevComponents.DotNetBar;

namespace GUI
{
    public partial class frmSinhVien : DevComponents.DotNetBar.Office2007Form
    {
        private DataTable _dt = new DataTable();
        private DataSet _ds = new DataSet();
        private DataSet _dsLop = new DataSet();
        private BOSinhVien _student;
        private BOLop _lop;
        private BOLog _log;

        public frmSinhVien()
        {
            InitializeComponent();
            //Thu nhỏ kích thước form ban đầu
            descSizeHeight();
        }

        #region "Tăng giảm kích thước form"
        public void incSizeHeight()
        {
            int y = Size.Height;
            for (int i = 0; i < 20; i++)
            {
                try
                {
                    Thread.Sleep(5);
                    Size = new Size(this.Size.Width, y + i * 11);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
            CenterToScreen();
        }

        public void descSizeHeight()
        {
            int y = Size.Height;
            for (int i = 0; i < 20; i++)
            {
                try
                {
                    Thread.Sleep(5);
                    Size = new Size(this.Size.Width, y - i * 11);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
            CenterToScreen();
        }
        #endregion

        #region "Đưa dữ liệu lên datagridview"
        private void frmSinhVien_Load(object sender, EventArgs e)
        {
            _student = new BOSinhVien();
            _ds = _student.Binding();
            _dt = _ds.Tables[0];
            dgvDanhsach.DataSource = _dt;
            dgvDanhsach.Columns[0].HeaderText = "Mã SV";
            dgvDanhsach.Columns[1].HeaderText = "Tên SV";
            dgvDanhsach.Columns[2].HeaderText = "Tên Lớp";
            dgvDanhsach.Columns[3].HeaderText = "Ngày Sinh";
            dgvDanhsach.Columns[4].HeaderText = "Nơi Sinh";
            dgvDanhsach.Columns[5].HeaderText = "Ảnh SV";
            dgvDanhsach.Columns[5].Visible = false;
            dgvDanhsach.Columns[0].Width = 80;
            dgvDanhsach.Columns[1].Width = 222;

            _lop = new BOLop();
            _dsLop = _lop.Binding();
            cbxLop.DataSource = _dsLop.Tables[0];
            cbxLop.DisplayMember = "TenLop";
            cbxLop.ValueMember = "TenLop";
        }
        #endregion

        #region "Hiện form thêm mới"
        private void btnThem_Click(object sender, EventArgs e)
        {
            incSizeHeight();
            txtMaSV.Text = "";
            txtTenSV.Text = "";
            txtNoiSinh.Text = "";
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnThoat.Enabled = false;
            btnUpdate.Enabled = false;
            picBox.Image = null;
            txtMaSV.Focus();
        }
        #endregion

        #region "Ẩn form thêm mới"
        private void btnHuy_Click(object sender, EventArgs e)
        {
            descSizeHeight();
            txtMaSV.Text = "";
            txtTenSV.Text = "";
            txtNoiSinh.Text = "";
            picBox.Image = null;
            btnThem.Enabled = true;
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
            btnThoat.Enabled = true;
            txtMaSV.Enabled = true;
            txtNoiSinh.Enabled = true;
            txtTenSV.Enabled = true;
            dateTimeNgaySinh.Enabled = true;
            btnOK.Enabled = true;
            btnUpdate.Enabled = true;
            btnBrowse.Enabled = true;
            dgvDanhsach.Enabled = true;
        }
        #endregion

        #region" Thoát"
        private void btnThoat_Click(object sender, EventArgs e)
        {
            Dispose();
        }
        #endregion

        #region "Hiện form sửa thông tin"
        private void btnSua_Click(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            if(dgvDanhsach.CurrentRow == null)
            {
                MessageBoxEx.Show("Bạn phải chọn 1 sinh viên !!!");
            }
            else
            {
                incSizeHeight();
                btnThem.Enabled = false;
                btnSua.Enabled = false;
                btnXoa.Enabled = false;
                btnThoat.Enabled = false;
                txtMaSV.Enabled = false;
                txtTenSV.Enabled = false;
                txtNoiSinh.Enabled = false;
                btnOK.Enabled = false;
                btnUpdate.Enabled = true;
                dateTimeNgaySinh.Enabled = false;
                btnBrowse.Enabled = false;
                dgvDanhsach.Enabled = false;
            }
        }
        #endregion

        #region "Xóa sinh viên"
        private void btnXoa_Click(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            var tenSV = dgvDanhsach.CurrentRow.Cells[0].Value.ToString();

            var dr = MessageBoxEx.Show("Bạn có thật sự muốn xóa?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr == DialogResult.Yes)
            {
                frmLyDo formLyDo = new frmLyDo();
                formLyDo.ShowDialog(this);
                string reason = formLyDo.LyDo;
                if (!reason.Equals(""))
                {
                    var result = BOSinhVien.Delete(tenSV);
                    MessageBoxEx.Show(result > 0 ? "Xóa thành công !!!" : "Xóa thất bại !!!");

                    _log = new BOLog();
                    _log.AddLog(Session.member.TenThanhVien, " xóa sinh viên " + tenSV, DateTime.Now, reason);
                }
            }
                
            frmSinhVien_Load(sender, e);
        }
        #endregion

        #region "Chọn ảnh"
        private void btnBrowse_Click(object sender, EventArgs e)
        {
            openFile.InitialDirectory = "D:/";
            openFile.Filter = "All Files|*.*|Bitmaps|*.bmp|GIFs|*.gif|JPEGs|*.jpg";
            openFile.FilterIndex = 1;
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                picBox.Image = Image.FromFile(openFile.FileName);
                picBox.SizeMode = PictureBoxSizeMode.StretchImage;
                picBox.BorderStyle = BorderStyle.FixedSingle;
            }
        }
        #endregion

        #region "Thêm mới sinh viên"
        private void btnOK_Click(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            string maSV = txtMaSV.Text;
            string tenSV = txtTenSV.Text;
            string tenLop = cbxLop.SelectedValue.ToString();
            DateTime ngaySinh = Convert.ToDateTime(dateTimeNgaySinh.Text);
            ngaySinh.ToString("d", CultureInfo.CreateSpecificCulture("en-US"));
            string noiSinh = txtNoiSinh.Text;
            MemoryStream ms = new MemoryStream();
            picBox.Image.Save(ms, picBox.Image.RawFormat);
            byte[] anhSV = ms.GetBuffer();
            ms.Close();
            int result = _student.Add(maSV, tenSV, tenLop, ngaySinh, noiSinh, anhSV);
            MessageBoxEx.Show(result > 0 ? "Thêm mới thành công !!!" : "Thêm mới thất bại !!!");

            _log = new BOLog();
            _log.AddLog(Session.member.TenThanhVien, " thêm mới sinh viên " + tenSV + " lớp " + tenLop, DateTime.Now, "");
            descSizeHeight();
            frmSinhVien_Load(sender, e);
            btnThem.Enabled = true;
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
            btnThoat.Enabled = true;
            dgvDanhsach.Enabled = true;
        }
        #endregion

        #region "Gán dữ liệu từ DataGridView vào form Sửa"
        private int row;
        private void dgvDanhsach_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            row = e.RowIndex;
            txtMaSV.Text = dgvDanhsach.Rows[row].Cells[0].Value.ToString();
            txtTenSV.Text = dgvDanhsach.Rows[row].Cells[1].Value.ToString();
            cbxLop.SelectedValue = dgvDanhsach.Rows[row].Cells[2].Value.ToString();
            dateTimeNgaySinh.Text = dgvDanhsach.Rows[row].Cells[3].Value.ToString();
            txtNoiSinh.Text = dgvDanhsach.Rows[row].Cells[4].Value.ToString();
            byte[] imageData = (byte[])(_ds.Tables[0].Rows[row]["AnhSV"]);
            MemoryStream ms = new MemoryStream(imageData);
            picBox.SizeMode = PictureBoxSizeMode.StretchImage;
            picBox.Image = Image.FromStream(ms);
            ms.Close();
        }
        #endregion

        #region "Cập nhật thông tin Sinh viên"
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            string MaSV = txtMaSV.Text;
            string tenLop = cbxLop.SelectedValue.ToString();
            frmLyDo formLyDo = new frmLyDo();
            formLyDo.ShowDialog(this);
            string reason = formLyDo.LyDo;
            if (!reason.Equals(""))
            {
                int result = _student.Update(MaSV, tenLop);
                MessageBoxEx.Show(result > 0 ? "Cập nhật thành công !!!" : "Cập nhật lỗi !!!");

                _log = new BOLog();
                _log.AddLog(Session.member.TenThanhVien, " chuyển sinh viên " + txtTenSV.Text + " sang lớp " + tenLop, DateTime.Now, reason);
            }
            descSizeHeight();
            frmSinhVien_Load(sender, e);
            btnThem.Enabled = true;
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
            btnThoat.Enabled = true;
            dgvDanhsach.Enabled = true;
        }
        #endregion

        #region "Kiểm tra xem mã sinh viên đã được sử dụng hay chưa"
        private void txtMaSV_Leave(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            bool flag;
            string MaSV = txtMaSV.Text;
            var check = new BOSinhVien();
            flag = check.CheckMaSV(MaSV);
            if(flag == true)
            {
                MessageBoxEx.Show("Mã sinh viên đã được sử dụng !!!");
                txtMaSV.Text = "";
                txtMaSV.Focus();
            }
        }
        #endregion

        #region "Bắt sự kiện gõ dữ liệu vào để tìm kiếm"
        private void masktxtSearch_TextChanged(object sender, EventArgs e)
        {
            string maSV =  masktxtSearch.Text;
            if (maSV.Equals(""))
                frmSinhVien_Load(sender, e);
            else
            {
                _ds = _student.SearchMaSV(maSV);
                dgvDanhsach.DataSource = _ds.Tables[0];
            }
        }
        #endregion

        #region "Bắt sự kiện gõ dữ liệu vào để tìm kiếm"
        private void txtSearchTenSV_TextChanged(object sender, EventArgs e)
        {
            string tenSV = txtSearchTenSV.Text;
            if (tenSV.Equals(""))
                frmSinhVien_Load(sender, e);
            else
            {
                _ds = _student.SearchTenSV(tenSV);
                dgvDanhsach.DataSource = _ds.Tables[0];
            }
        }
        #endregion

        private void frmSinhVien_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dr;
            MessageBoxEx.EnableGlass = false;
            dr = MessageBoxEx.Show("Bạn có thật sự muốn thoát ?", "Thông báo", MessageBoxButtons.YesNo,
                                   MessageBoxIcon.Question);
            if (dr == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
}